﻿/*
 * Created by SharpDevelop.
 * User: it1050
 * Date: 11/03/11
 * Time: 21:53
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;
using System.IO;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;

namespace MoveFiles
{
  /// <summary>
  /// Description of MainForm.
  /// </summary>
  public partial class MainForm : Form
  {
    public MainForm()
    {
      //
      // The InitializeComponent() call is required for Windows Forms designer support.
      //
      InitializeComponent();
      
      //
      // TODO: Add constructor code after the InitializeComponent() call.
      //
    }
//--------------------------------------------------------------------------------------------------------//    
    void BtnAnalisiOpenClick(object sender, EventArgs e)
    {
    	// TODO: Implement BtnAnalisiOpenClick
    	dlgOpen.Title="select file";
    	if (dlgOpen.ShowDialog() == DialogResult.OK)
    	  edtAnalisi.Text = dlgOpen.FileName.ToString();
    	  
    }
//--------------------------------------------------------------------------------------------------------//    
    void ParseFile(string pFname, bool pExit)
    {
      //variabili
      string vLine="";  //stringa per la gestione della singola riga del file
      string vData="";  //valore della data fattura che servirà per rinominare il file
      string vFOA="";   //codice del venditore per il recupero del nome della cartella + rinomina del file
      string vNFatt=""; //numero della fattura
      string vFname=""; //nome del file per fare la copia del file
      int vIdx;         //posizione della substring nella ricerca
      
      //starting parsing the file
      
      // create reader & open file
      StreamReader tr = new StreamReader(pFname);

      //clean log
      memoLog.Text="";
      //read a line of text
      while (tr.Peek() >= 0) 
        {
          vLine = tr.ReadLine();
           //cerco la stringa per verificare che si tratti della linea col nome del file
          vIdx = vLine.IndexOf(@".pdf");  
          if (vIdx!=-1)
            {
            vFname=vLine.Substring(0,vIdx+4);
            memoLog.Text+="Using file..."+vFname+" \r\n ";
            }
          //recupero la data della fattura
          vIdx = vLine.IndexOf(@"DATA NUMERO");
          if (vIdx!=-1)
            {
            vLine = tr.ReadLine();
            vData = vLine.Substring(vLine.IndexOf(" ")+1,10);
            memoLog.Text+="Data fattura-> "+vData+" \r\n ";  
            }
          //recupero il numero fattura
          vIdx=vLine.IndexOf(@"MODALIT");
          if (vIdx!=-1)
            {
            vLine = tr.ReadLine();
            vNFatt = vLine.Substring(vLine.IndexOf(" ")+1,vLine.Length-vLine.IndexOf(" ")-1);
            memoLog.Text+="NrFattura->"+vNFatt+" \r\n ";
            }
          //recupero il codice FOA
          vIdx = vLine.IndexOf(@"FOA000");
          if (vIdx!=-1)
            {
            //leggo la linea successiva
            vFOA = vLine.Substring(vIdx,9);
            memoLog.Text+="FOA->"+vFOA+" \r\n ";
            DoFileCopy(vFname,vData,vNFatt,vFOA);
            }
          
          //eseguo una seconda ricerca per cercare il secondo codice
          vIdx = vLine.IndexOf(@"FOA000",vIdx+1);
          if (vIdx != -1)
            {
            vFOA = vLine.Substring(vIdx,9);
            memoLog.Text+="FOA->"+vFOA+" \r\n ";
            DoFileCopy(vFname,vData,vNFatt,vFOA);
            }
        } //end while
      // close the stream
      tr.Close();
      
      //verifica il parametro sull'uscita dal programma alla fine del parsing
      if (pExit)
        Application.Exit();
      else  
        MessageBox.Show("Done");
    }
    
//--------------------------------------------------------------------------------------------------------//    
    void MainFormLoad(object sender, EventArgs e)
    {
    	// TODO: Implement MainFormLoad
    	//carico i dati nei campi ella mask se ci sono dei parametri passati da linea di comando
    	
    //if Environment.GetCommandLineArgs() 
    string[] argv;
    
    argv = Environment.GetCommandLineArgs();
    if (argv.Length>1)
      ParseFile(argv[1].ToString(), true);
      //edtAnalisi.Text=argv[1].ToString();
    }
//--------------------------------------------------------------------------------------------------------//
    string DateSwitch(string pDate)
    {
      //ricevo una data e la giro nel fromato AAAAMMGG
      return pDate.Substring(7,4)+pDate.Substring(4,2)+pDate.Substring(1,2);
    }
//--------------------------------------------------------------------------------------------------------//
    void DoFileCopy(string pFName, string pData, string pNfatt, string pFOA)
    {
      //eseguo la copia di un file nella cartella di destinazione verificando l'esistenza 
      //   della cartella stessa e del file
      string targetPath;
      string destFile;
      
      targetPath=pFName.Substring(0,pFName.Length-19)+pFOA;
      if (!System.IO.Directory.Exists(targetPath))
        {
            System.IO.Directory.CreateDirectory(targetPath);
        }
      
      destFile=targetPath+"\\"+DateSwitch(pData)+"_"+pNfatt+".pdf";
        
      System.IO.File.Copy(pFName, destFile, true);
    }
//--------------------------------------------------------------------------------------------------------//
    void BtnRunClick(object sender, EventArgs e)
    {
    	// TODO: Implement BtnRunClick
    	ParseFile(edtAnalisi.Text, false);
    }
  }
}
